#!/usr/bin/env perl
#
# zpkg.pm
#

package zpkg;

use strict;
use warnings;

use Carp;

sub hello
{
    my $class = __PACKAGE__;
    carp("${class}::hello().");
}

#######################################################################

package zpkg::Builder;

use Carp;
use vars qw(@ISA);

sub new
{
    my $invocant = shift;
    my $class = ref($invocant) || $invocant;
    my $parent = ref($invocant) && $invocant;
    
    my $self;
    if (@ISA && $invocant->SUPER::can('new')) {
        $self = $invocant->SUPER::new(@_);
    }
    else {
        $self = {};
    }
    bless($self, $class);
    
    $self->{PARENT} = $parent;
    
    return $self;
}

sub build
{
    my $self = shift or return undef;
    
    zpkg::hello();
    
    my $class = __PACKAGE__;
    carp("${class}::build().");
}

#######################################################################

package zpkg::Releaser;

use Carp;
use vars qw(@ISA);

sub new
{
    my $invocant = shift;
    my $class = ref($invocant) || $invocant;
    my $parent = ref($invocant) && $invocant;
    
    my $self;
    if (@ISA && $invocant->SUPER::can('new')) {
        $self = $invocant->SUPER::new(@_);
    }
    else {
        $self = {};
    }
    bless($self, $class);
    
    $self->{PARENT} = $parent;
    
    return $self;
}

sub release
{
    my $self = shift or return undef;
    
    zpkg::hello();

    my $class = __PACKAGE__;
    carp("${class}::release().");
}

#######################################################################

1;

__END__

#######################################################################

=pod for module

use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);

use Exporter;
$VERSION = 1.0.0;
@ISA = qw(Exporter);

@EXPORT = qw(...);
#@EXPORT_OK = qw(...);
#%EXPORT_TAGS = ( TAG1 => [...], TAG2 => [...] );

=cut
